package es.tikitaka.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import es.tikitaka.dao.JornadaService;
import es.tikitaka.domain.liga.Jornada;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

@Name("jornadaService")
public class JornadaServiceImpl implements JornadaService {

	@In
	EntityManager em;

	/**
	 * Constructor por defecto
	 */
	public JornadaServiceImpl() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Método para obtener todas las jornadas almacenadas en el sistema
	 * 
	 * @return lista de todas las jornadas
	 */
	@SuppressWarnings("unchecked")
	public List<Jornada> getList() {
		List<Jornada> list = null;
		try {
			list = em.createQuery("select j from Jornada j order by j.fecha")
					.getResultList();
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * 
	 * @param jor
	 */
	public void persist(Jornada jor) {
		em.persist(jor);
	}

	/**
	 * Método para eliminar una jornada del sistema
	 * 
	 * @param id
	 *            Id de la jornada
	 * @return estado del proceso (true or false)
	 */
	public boolean delete(Integer id) {
		boolean correcto;
		try {
			Jornada jor = em.getReference(Jornada.class, id);
			em.remove(jor);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}

	/**
	 * Método para almacenar una jornada en el sistema o las modificaciones
	 * sufridas por una jornada ya existente
	 * 
	 * @param jornada
	 *            Jornada a almacenar
	 * @return estado del proceso (true or false)
	 */
	@Begin(join = true, flushMode = FlushModeType.MANUAL)
	public boolean save(Jornada jornada) {
		boolean correcto;
		try {
			em.persist(jornada);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}
}
